看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~
谁能九层台,不用累土起!
题目
给定pushed
和popped
两个序列,每个序列中的值都不重复,只有当它们可能是在最初空栈上进行的推入push
和弹出pop
操作序列的结果时,返回true
;否则,返回false
。
示例 1:
1 | 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] |
示例 2:
1 | 输入: pushed = [1,2,3,4,5], popped = [4,3,5,1,2] |
提示:
1 <= pushed.length <= 1000
0 <= pushed[i] <= 1000
pushed
的所有元素 互不相同popped.length == pushed.length
popped
是pushed
的一个排列
解题思路
- 首先我们需要理解栈的特点:先进后出,后进先出
- 遍历
pushed
数组,将遍历的项插入到新数组中 - 定义一个指针用于记录与
popped
比较到了什么位置 - 如果遍历过程中有遍历的项与
popped
的上述指针所在项相同,移除新数组尾项 - 将新数组从后往前与
popped
从指针所在位置往后进行比较 - 直到两个数组出现不同的项再去重复上面两步
- 如果新数组正好长度为
0
则说明满足题意
解题代码
1 | var validateStackSequences = function(pushed, popped) { |
如有任何问题或建议,欢迎留言讨论!